﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using WindowsFormApplication.FormBase;
using WindowsFormsView;
using WindowsFormsModel.BusinessObjects;
using WindowsFormsPresenter.RestaurantMenuCategory;
using Utils;

namespace WindowsFormApplication.FormCategoryTree
{
    public partial class frmRestaurantMenuCategoryDetail : frmBaseTreeDetail, IRestaurantMenuCategoryView, IRestaurantMenuCategoriesView
    {
        #region Presenter

        private RestaurantMenuCategoryPresenter _restaurantMenuCategoryPresenter;
        private RestaurantMenuCategoriesPresenter _restaurantMenuCategoriesPresenter;

        #endregion

        public IList<RestaurantMenuCategoryModel> RestaurantMenuCategories
        {
            set
            {
                var restaurantMenuCategories = value;

                cboParentID.DataSource = restaurantMenuCategories;
                cboParentID.DisplayMember = "MenuCategoryName";
                cboParentID.ValueMember = "MenuCategoryID";

                for (int i = 0; i < cboParentID.DisplayLayout.Bands[0].Columns.Count; i++)
                {
                    cboParentID.DisplayLayout.Bands[0].Columns[i].Hidden = true;
                }

                cboParentID.DisplayLayout.Bands[0].Columns["MenuCategoryCode"].Hidden = false;
                cboParentID.DisplayLayout.Bands[0].Columns["MenuCategoryName"].Hidden = false;

                cboParentID.DisplayLayout.Bands[0].Columns["MenuCategoryCode"].Header.Caption = "Mã loại món ăn";
                cboParentID.DisplayLayout.Bands[0].Columns["MenuCategoryName"].Header.Caption = "Tên loại món ăn";
            }
        }

        public string MenuCategoryID { get; set; }

        public string MenuCategoryCode
        {
            get { return txtMenuCategoryCode.Text; }
            set { txtMenuCategoryCode.Text = value; }
        }

        public bool IsParent
        {
            get { return chkIsParent.Checked; }
            set { chkIsParent.Checked = value; }
        }

        public string ParentID
        {
            get
            {
                if ((chkIsParent.Checked == false) && (cboParentID.Value != null))
                {
                    return cboParentID.Value.ToString();
                }
                else { return null; }
            }
            set { cboParentID.Value = value; }
        }

        public string MenuCategoryName
        {
            get { return txtMenuCategoryName.Text; }
            set { txtMenuCategoryName.Text = value; }
        }

        public string Description
        {
            get { return txtDescription.Text; }
            set { txtDescription.Text = value; }
        }

        public bool IsActive
        {
            get { return chkIsActive.Checked; }
            set { chkIsActive.Checked = value; }
        }

        public string RestaurantID { get; set; }

        protected override void InitData()
        {
            _restaurantMenuCategoriesPresenter.DisplayActiveByBranch();
            if (KeyValue != null)
                _restaurantMenuCategoryPresenter.Display(KeyValue);
        }

        private void chkIsParent_CheckedChanged(object sender, EventArgs e)
        {
            if (chkIsParent.Checked.ToString().AsBool() == true)
            {
                cboParentID.Value = null;
                cboParentID.ReadOnly = true;
            }
            else
                cboParentID.ReadOnly = false;
        }

        protected override bool ValidData()
        {
            if (string.IsNullOrEmpty(MenuCategoryCode))
            {
                ShowMessageBox("Bạn chưa nhập mã loại món ăn !", "Thông báo nhập sai dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtMenuCategoryCode.Focus();
                return false;
            }
            if (string.IsNullOrEmpty(MenuCategoryName))
            {
                ShowMessageBox("Bạn chưa nhập tên loại món ăn !", "Thông báo nhập sai dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtMenuCategoryName.Focus();
                return false;
            }
            if ((chkIsParent.Checked == false) && (cboParentID.Value == null))
            {
                ShowMessageBox("Bạn chưa nhập loại món ăn cha !", "Thông báo nhập sai dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cboParentID.Focus();
                return false;
            }
            if (eActionMode == ActionMode.Edit)
            {
                if (chkIsParent.Checked == false)
                {
                    if (cboParentID.Value.ToString().Equals(MenuCategoryID))
                    {
                        ShowMessageBox("Bạn mã loại cha không hợp lệ !", "Thông báo nhập sai dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        cboParentID.Value = null;
                        cboParentID.Focus();
                        return false;
                    }
                }
            }
            return true;
        }

        protected override bool SaveData()
        {
            try
            {
                if (eActionMode == ActionMode.AddNew)
                {
                    _restaurantMenuCategoryPresenter.Save();
                    ShowMessageBox("Thêm mới dữ liệu thành công !", "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    _restaurantMenuCategoryPresenter.Save();
                    ShowMessageBox("Sửa dữ liệu thành công !", "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (ApplicationException ex)
            {
                ShowMessageBox(ex.Message, "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            return true;
        }

        public frmRestaurantMenuCategoryDetail()
        {
            InitializeComponent();

            _restaurantMenuCategoryPresenter = new RestaurantMenuCategoryPresenter(this);
            _restaurantMenuCategoriesPresenter = new RestaurantMenuCategoriesPresenter(this);
        }
    }
}
